from PyQt5.QtWidgets import QHBoxLayout, QPushButton, QSlider, QLabel, QComboBox, QWidget
from PyQt5.QtCore import Qt, QPropertyAnimation
from PyQt5.QtGui import QPainter

class 控制面板组件(QWidget):
    def __init__(self, 父布局=None):
        super().__init__()
        self.父布局 = 父布局
        
        # 使用扁平化布局减少嵌套
        主布局 = QHBoxLayout(self)
        self.setLayout(主布局)
        
        # 创建播放控制按钮
        self.播放按钮 = QPushButton('播放')
        self.暂停按钮 = QPushButton('暂停')
        self.停止按钮 = QPushButton('停止')
        
        # 创建音量控制
        self.音量标签 = QLabel('音量: 100%')
        self.音量滑块 = QSlider(Qt.Horizontal)
        self.音量滑块.setRange(0, 100)
        self.音量滑块.setValue(100)
        
        # 创建播放模式选择
        self.模式标签 = QLabel('播放模式:')
        self.模式选择 = QComboBox()
        self.模式选择.addItems(['列表循环', '单曲循环', '随机播放'])
        self.模式选择.currentIndexChanged.connect(self.应用播放模式)
        
        # 创建皮肤切换
        self.皮肤标签 = QLabel('界面主题:')
        self.皮肤选择 = QComboBox()
        self.皮肤选择.addItems(['默认', '深色主题', '粉色系'])
        self.皮肤选择.currentIndexChanged.connect(self.应用皮肤)
        
        # 添加到布局
        主布局.addWidget(self.播放按钮)
        主布局.addWidget(self.暂停按钮)
        主布局.addWidget(self.停止按钮)
        主布局.addWidget(self.音量标签)
        主布局.addWidget(self.音量滑块)
        主布局.addWidget(self.模式标签)
        主布局.addWidget(self.模式选择)
        主布局.addWidget(self.皮肤标签)
        主布局.addWidget(self.皮肤选择)
    
    def paintEvent(self, event):
        """优化绘制事件，减少重绘区域"""
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setRenderHint(QPainter.TextAntialiasing)
        
        # 创建淡入淡出动画
        动画 = QPropertyAnimation(self, b'windowOpacity')
        动画.setDuration(500)  # 动画持续时间500毫秒
        动画.setStartValue(1.0)
        动画.setEndValue(0.5)
        动画.start()
        
        # 根据选择应用不同样式表
        if self.皮肤选择.currentIndex() == 0:  # 默认主题
            self.setStyleSheet("border-image: none;")
        elif self.皮肤选择.currentIndex() == 1:  # 深色主题
            self.setStyleSheet("border-image: url(:/dark_theme.png) 0 0 0 0 stretch; background-color: #2d2d2d;")
        elif self.皮肤选择.currentIndex() == 2:  # 粉色系
            self.setStyleSheet("border-image: url(:/pink_theme.png) 0 0 0 0 stretch; background-color: #ffe6f0;")
    
    def 应用皮肤(self, 索引):
        """应用界面主题并优化渲染性能"""
        # 创建淡入淡出动画
        动画 = QPropertyAnimation(self, b'windowOpacity')
        动画.setDuration(500)  # 动画持续时间500毫秒
        动画.setStartValue(1.0)
        动画.setEndValue(0.5)
        动画.start()
        
        # 启用硬件加速的样式表
        if 索引 == 0:  # 默认主题
            self.setStyleSheet("border-image: none;")
        elif 索引 == 1:  # 深色主题
            self.setStyleSheet("border-image: url(:/dark_theme.png) 0 0 0 0 stretch; background-color: #2d2d2d;")
        elif 索引 == 2:  # 粉色系
            self.setStyleSheet("border-image: url(:/pink_theme.png) 0 0 0 0 stretch; background-color: #ffe6f0;")
    
    def 应用播放模式(self, 索引):
        """应用选择的播放模式并保存设置"""
        if hasattr(self.父布局, '播放器'):
            self.父布局.播放器.家长控制.设置播放模式(索引)
            self.父布局.播放器.云同步管理.同步设置()  # 同步播放模式设置
            
            # 添加动画效果
            animation = QPropertyAnimation(self.模式标签, b"opacity")
            animation.setDuration(500)
            animation.setStartValue(1.0)
            animation.setEndValue(0.5)
            animation.start()
